Welcome
This website shows real-time data from monitoring programs in Lake Champlain and throughout the Lake Champlain Basin.
All data plots are interactive. Hover over plots to see details on each measurement, or click and drag to zoom in on a section. Additional features can be found at the top right of each plot.
This website is under development. All data is provisional and for educational purposes only.
Lake Champlain level
Lake level data from the past 30 days
Lake level data is shown below for four locations on Lake Champlain. Data is collected by the US Geological Survey.
Turn lake level station layers on and off by clicking them in the legend. To see data from only one lake level station, double-click its name. Double-click again to turn all layers back on.
lake_level_station_info <- "data/lake_level_station_info.csv" %>%
read_csv() %>%
mutate(gage_number = gage_number %>% # Add leading zero to all gage codes
paste0("0", .))
lake_level_day_window <- 30
param_code <- "62614" # Lake water surface elevation above NGVD 1929, feet
# param_code <- "62615" # Lake water surface elevation above NAVD 1988, feet
time_zone <- "America/New_York"
end <- Sys.Date()
start <- end - duration(lake_level_day_window, units = "days")
lake_level <- lake_level_station_info %>%
select(c(station, gage_number)) %>%
mutate(level_data = map(.x = gage_number,
.f = ~readNWISuv(siteNumber = .x,
startDate = start,
endDate = end,
parameterCd = param_code,
tz = time_zone) %>%
rename(timestamp = dateTime,
elevation_ft = X_62614_00000) %>%
select(c(timestamp,
elevation_ft)))) %>%
unnest(level_data)
lake_level_together <- lake_level %>%
mutate(station = station %>%
fct_reorder2(timestamp, elevation_ft)) %>%
ggplot() +
geom_line(aes(x = timestamp,
y = elevation_ft,
color = station),
size = 1,
alpha = 0.5) +
scale_color_viridis("Level station",
discrete = TRUE) +
scale_y_continuous(breaks = pretty_breaks()) +
scale_x_datetime(breaks = pretty_breaks()) +
labs(x = "",
y = "Lake water surface elevation\n(feet above NGVD 1929)") +
theme(axis.text = element_text(face = "bold",
size = 14),
axis.title = element_text(face = "bold",
size = 14),
legend.text = element_text(face = "bold",
size = 10))
ggplotly(lake_level_together)
Lake Champlain water temperature
Water temperature data is shown below for three locations on Lake Champlain. Data is collected by the US Geological Survey.
Turn temperature station layers on and off by clicking them in the legend. To see data from only one lake temperature station, double-click its name. Double-click again to turn all layers back on.
In degrees Fahrenheit
# gather station info
lake_temp_station_info <- "data/lake_temp_station_info.csv" %>%
read_csv() %>%
mutate(gage_number = gage_number %>% # Add leading zero to all gage codes
paste0("0", .))
# enter plot window duration
lake_temp_day_window <- 30
# set start and end dates
end <- Sys.Date()
start <- end - duration(lake_temp_day_window, units = "days")
# USGS parameter code and time zone
param_code <- "00010" # water temperature in degC
time_zone <- "America/New_York"
# gather data and create tibble
lake_temp <- lake_temp_station_info %>%
select(c(station, gage_number)) %>%
mutate(temp_data = map(.x = gage_number,
.f = ~readNWISuv(siteNumber = .x,
startDate = start,
endDate = end,
parameterCd = param_code,
tz = time_zone) %>%
rename(timestamp = dateTime,
water_temp_degC = X_00010_00000) %>%
select(c(timestamp,
water_temp_degC)))) %>%
unnest(temp_data) %>%
mutate(water_temp_degF = water_temp_degC %>% # create column for Fahrenheit
celsius.to.fahrenheit())
# plot water temps in deg F
lake_temp_together_degF <- lake_temp %>%
mutate(station = station %>%
fct_reorder2(timestamp, water_temp_degF)) %>%
ggplot() +
geom_line(aes(x = timestamp,
y = water_temp_degF,
color = station),
size = 1,
alpha = 0.5) +
scale_color_viridis("Temperature station",
discrete = TRUE) +
scale_y_continuous(breaks = pretty_breaks()) +
scale_x_datetime(breaks = pretty_breaks()) +
labs(x = "",
y = "Lake water temperature\n(Degrees F)") +
theme(axis.text = element_text(face = "bold",
size = 14),
axis.title = element_text(face = "bold",
size = 14),
legend.text = element_text(face = "bold",
size = 10))
ggplotly(lake_temp_together_degF)
In degrees Celsius
# plot water temps in deg C
lake_temp_together_degC <- lake_temp %>%
mutate(station = station %>%
fct_reorder2(timestamp, water_temp_degC)) %>%
ggplot() +
geom_line(aes(x = timestamp,
y = water_temp_degC,
color = station),
size = 1,
alpha = 0.5) +
scale_color_viridis("Temperature station",
discrete = TRUE) +
scale_y_continuous(breaks = pretty_breaks()) +
scale_x_datetime(breaks = pretty_breaks()) +
labs(x = "",
y = "Lake water temperature\n(Degrees C)") +
theme(axis.text = element_text(face = "bold",
size = 14),
axis.title = element_text(face = "bold",
size = 14),
legend.text = element_text(face = "bold",
size = 10))
ggplotly(lake_temp_together_degC)
Lake Champlain tributaries
Tributary discharge data from the past 30 days
Discharge (volume of water per time) data is shown below for 19 major tributaries of Lake Champlain. Data is collected by the US Geological Survey.
Turn tributary layers on and off by clicking them in the legend. To see data from only one tributary, double-click its name. Double-click again to turn all layers back on.
In cubic feet per second
trib_station_info <- "data/trib_station_info.csv" %>%
read_csv() %>%
mutate(gage_number = gage_number %>% # Add leading zero to all gage codes
paste0("0", .))
trib_day_window <- 30
param_code <- "00060" # discharge in cfs
time_zone <- "America/New_York"
end <- Sys.Date()
start <- end - duration(trib_day_window, units = "days")
tribq <- trib_station_info %>%
select(c(trib, gage_number)) %>%
mutate(qdata = map(.x = gage_number,
.f = ~readNWISuv(siteNumber = .x,
startDate = start,
endDate = end,
parameterCd = param_code,
tz = time_zone) %>%
rename(timestamp = dateTime,
discharge_cfs = X_00060_00000) %>%
mutate(discharge_cms = discharge_cfs * 0.0283168) %>%
select(c(timestamp,
discharge_cfs,
discharge_cms)))) %>%
unnest(qdata) %>%
filter(!(timestamp == ymd_hms("2021-09-01 05:30:00", tz = "EDT") &
trib == "Mettawee")) # remove erroneous value
tribq_together_cfs <- tribq %>%
mutate(trib = trib %>%
fct_reorder2(timestamp, discharge_cms)) %>%
ggplot() +
geom_line(aes(x = timestamp,
y = discharge_cfs,
color = trib),
size = 1,
alpha = 0.5) +
scale_color_viridis("Tributary",
discrete = TRUE) +
labs(x = "",
y = "Discharge (cubic feet per second)") +
theme(axis.text = element_text(face = "bold",
size = 14),
axis.title = element_text(face = "bold",
size = 14),
legend.text = element_text(face = "bold",
size = 10))
ggplotly(tribq_together_cfs)
# Sum discharges together by timestamp
combined_q <- tribq %>%
select(!c(trib, gage_number)) %>%
group_by(timestamp) %>%
summarise(total_discharge_cms = sum(discharge_cms),
total_discharge_cfs = sum(discharge_cfs),
n = n()) %>%
filter(!n < max(n)) # remove timestamps that don't include all tribs
n_combined_tribs <- combined_q %>%
pull("n") %>%
max()
In cubic meters per second
tribq_together_cms <- tribq %>%
mutate(trib = trib %>%
fct_reorder2(timestamp, discharge_cms)) %>%
ggplot() +
geom_line(aes(x = timestamp,
y = discharge_cms,
color = trib),
size = 1,
alpha = 0.5) +
scale_color_viridis("Tributary",
discrete = TRUE) +
labs(x = "",
y = "Discharge (cubic meters per second)") +
theme(axis.text = element_text(face = "bold",
size = 14),
axis.title = element_text(face = "bold",
size = 14),
legend.text = element_text(face = "bold",
size = 10))
ggplotly(tribq_together_cms)